﻿using LM.InterfacesFabricas.DTOs;
using LM.InterfacesFabricas.Interfaces.Servicos;
using LM.InterfacesFabricas.Utilidades;
using LM.Negocio.Objetos;
using LM.Negocio.Validadores;
using LM.Repositorios;
using LM.Repositorios.Interfaces;
using System.Collections.Generic;

namespace LM.Servicos
{
    public class ServicoTabelaPreco : IServicoTabelaPreco
    {
        public void Cadastre( DtoTabelaPreco tabelaPreco )
        {
            var repositorioDeTabelaPreco = FabricaDeRepositorios.Crie<IRepositorioDeTabelaPreco>();
            var validadorDeTabelaPreco = new ValidadorDeTabelaPreco( repositorioDeTabelaPreco );
            var tabelaPrecoObjeto = ConversorDeObjetos.Copie<TabelaDePreco>( tabelaPreco );

            validadorDeTabelaPreco.ValideCadastro( tabelaPrecoObjeto );
            repositorioDeTabelaPreco.Cadastre( tabelaPrecoObjeto );
        }

        public void Atualize( DtoTabelaPreco tabelaPreco )
        {
            var repositorioDeTabelaPreco = FabricaDeRepositorios.Crie<IRepositorioDeTabelaPreco>();
            var validadorDeTabelaPreco = new ValidadorDeTabelaPreco( repositorioDeTabelaPreco );
            var tabelaPrecoObjeto = ConversorDeObjetos.Copie<TabelaDePreco>( tabelaPreco );

            validadorDeTabelaPreco.ValideAtualizacao( tabelaPrecoObjeto );
            repositorioDeTabelaPreco.Atualize( tabelaPrecoObjeto );
        }

        public void Exclua( int codigo )
        {
            var repositorioDeTabelaPreco = FabricaDeRepositorios.Crie<IRepositorioDeTabelaPreco>();
            var validadorDeTabelaPreco = new ValidadorDeTabelaPreco( repositorioDeTabelaPreco );
            var tabelaPrecoObjeto = ConversorDeObjetos.Copie<TabelaDePreco>( repositorioDeTabelaPreco.Consulte( codigo ) );

            validadorDeTabelaPreco.ValideExclusao( tabelaPrecoObjeto );
            repositorioDeTabelaPreco.Exclua( tabelaPrecoObjeto );
        }

        public DtoTabelaPreco Consulte( int codigo )
        {
            var tabelaPrecoObjeto = FabricaDeRepositorios.Crie<IRepositorioDeTabelaPreco>().Consulte( codigo );
            return ConversorDeObjetos.Copie<DtoTabelaPreco>( tabelaPrecoObjeto );
        }

        public IList<DtoTabelaPreco> ConsulteTodos()
        {
            return ConversorDeObjetos.Copie<DtoTabelaPreco, TabelaDePreco>( FabricaDeRepositorios.Crie<IRepositorioDeTabelaPreco>().ConsulteTodos() );
        }


        public DtoTabelaPreco Consulte( string nome )
        {
            var tabelaPrecoObjeto = FabricaDeRepositorios.Crie<IRepositorioDeTabelaPreco>().Consulte( e => e.Nome.ToUpper().Equals( nome.ToUpper() ) );
            return ConversorDeObjetos.Copie<DtoTabelaPreco>( tabelaPrecoObjeto );
        }
    }
}
